﻿//
// Plik zawierający właściwą implementację elementów klasy Application.
//

using System;
using System.Collections.Generic;
using System.Linq;
using OcenyOpisowe.Client.Controls;
using System.Html;
using OcenyOpisowe.Client.Security;

namespace OcenyOpisowe.Client
{
	/// <summary>
	/// Klasa główna aplikacji.
	/// Odpowiada za załadowanie oraz wystartowanie klienckiej części aplikacji
	/// Oceny Opisowe 2011.
	/// </summary>
	partial class Application
	{
		#region Publiczne właściwości klasy
		/// <summary>
		/// Pobiera menu aplikacji pozwalające na wykonywanie akcji w systemie.
		/// </summary>
		public MenuControl ApplicationMenu
		{
			get { return _applicationMenu; }
		}
		/// <summary>
		/// Konsola plikacji służąca do informowania o błędach aplikacji.
		/// </summary>
		public ApplicationConsole Console
		{
			get { return _applicationConsole; }
		}
		/// <summary>
		/// Pobiera obecnie wyświetlany przez aplikację ekran.
		/// </summary>
		public ApplicationScreen CurrentScreen
		{
			get { return _currentScreen; }
		}
		/// <summary>
		/// Obecnie zalogowany do aplikacji użytkownik.
		/// </summary>
		public User CurrentUser
		{
			get { return _currentUser; }
			set { _currentUser = value; }
		}
		/// <summary>
		/// Kontrolka konta obecnie zalogowanego użytkownika.
		/// Pozwala na sprawdzanie stanu zalogowania użytkownika
		/// oraz zarządzać stanem zalogowania tegoż użytkownika.
		/// </summary>
		public UserProfileControl UserProfileControl
		{
			get { return _userProfileControl; }
		}
		#endregion

		#region Prywatne zmienne klasy
		/// <summary>
		/// Konsola aplikacji służąca do informowania o błędach aplikacji.
		/// </summary>
		private ApplicationConsole _applicationConsole;
		/// <summary>
		/// Menu aplikacji pozwalające na wybieranie akcji wewnątrz aplikacji.
		/// </summary>
		private MenuControl _applicationMenu;
		/// <summary>
		/// Obecnie wyświetlany przez aplikację ekran.
		/// </summary>
		private ApplicationScreen _currentScreen;
		/// <summary>
		/// Obecnie zalogowany do aplikacji użytkownik.
		/// </summary>
		private User _currentUser;
		/// <summary>
		/// Kontrolka konta obecnie zalogowanego użytkownika.
		/// Pozwala na sprawdzanie stanu zalogowania użytkownika
		/// oraz zarządzać stanem zalogowania tegoż użytkownika.
		/// </summary>
		private UserProfileControl _userProfileControl;
		#endregion

		#region Konstruktor klasy
		/// <summary>
		/// Inicjuje instancję aplikacji.
		/// </summary>
		private Application()
		{
			_applicationConsole = new ApplicationConsole();
		}
		#endregion

		#region Metoda SetApplicationMenu
		/// <summary>
		/// Ustawia menu aplikacji dla tej aplikacji.
		/// </summary>
		/// <param name="menuControl">Menu aplikacji jakie przypisać.</param>
		public void SetApplicationMenu(MenuControl menuControl)
		{
			_applicationMenu = menuControl;
			menuControl.ParentDomElement = Document.Body;
		}
		#endregion

		#region Metoda SetUserProfileControl
		/// <summary>
		/// Metoda dodająca kontrolkę profilu użytkownika do aplikacji.
		/// </summary>
		/// <param name="userProfileControl">Kontrolka profilu użytkownika do dodania.</param>
		public void SetUserProfileControl(UserProfileControl userProfileControl)
		{
			_userProfileControl = userProfileControl;
			userProfileControl.ParentDomElement = Document.Body;
		}
		#endregion
	}
}
